import showModal from '@/utils/showModalHandler.js'
import cacheHandler from '@/utils/cacheHandler.js'
const TTL_PERMANENT = -1 // ---- 永久有效 ----
const TTL_TIMEOUT = -2 // ---- 超时了 ----
const TTL_UNEXIST = -3 // ---- 没有缓存 ----
const TTL_INTIME = -4 // ---- 时效中 ----
export default {
/**
* 缓存TOKEN
* @param { String } isAuthToken authToken:true, dhccToken:false
* @param { String } value TOKEN的值
* @param { Integer } expire 秒数
* @return { Boolen } 是否存储成功
*/
  set: function(isAuthToken, value, expire = -1) {
    this.expire = expire
    const data = {
      start: (Date.parse(new Date())) / 1000,
      expire,
      value
    }
    try {
      if (isAuthToken) {
        cacheHandler.setAuthToken(data)
      } else {
        cacheHandler.setTokenParam(data)
      }
    } catch (e) {
      showModal.showToast('缓存异常！')
    }
  },
  /**
* 获取缓存的TOKEN
* @return { String } 当没有缓存的时候返回空串
*/
  get: function() {
    const ttl = this.ttl()
    if (ttl !== TTL_UNEXIST && ttl !== TTL_TIMEOUT) {
      try {
        //const token = cacheHandler.getTokenParam()
        const authToken = cacheHandler.getAuthToken()
        if (/* !token || */ !authToken) {
          return ''
        }
        let tokenValue = {
          //token: token.value,
          authToken: authToken.value
        }
        return tokenValue
      } catch (e) {
        showModal.showToast('缓存异常！')
      }
    } else {
      return ''
    }
  },
  /**
* 是否缓存，与has不同，这个失效之后也算不存在
* @return { Boolean }
*/
  exist: function() {
    const ttl = this.ttl()
    if (ttl !== TTL_UNEXIST && ttl !== TTL_TIMEOUT) {
      return true
    } else {
      return false
    }
  },
  /**
* 缓存剩余时间
* @return { Integer }
*/
  ttl: function() {
    if (!this.has()) return TTL_UNEXIST
    try {
      //const token = cacheHandler.getTokenParam()
      const authToken = cacheHandler.getAuthToken()
      if (authToken.expire !== TTL_PERMANENT) {
        const now = (Date.parse(new Date())) / 1000
        //const interval = now - token.start
        const authInterval = now - authToken.start
        if (/* interval > token.expire || */authInterval > authToken.expire) {
				  this.remove()
				  return TTL_TIMEOUT
        } else {
				  return TTL_INTIME
        }
      } else {
        return TTL_PERMANENT
      }
    } catch (e) {
      showModal.showToast('缓存异常！')
      throw e
    }
  },
  /**
* 删除缓存
* @return { Boolean }
*/
  remove: function() {
    try {
      //cacheHandler.clearTokenParam()
      cacheHandler.clearAuthToken()
    } catch (e) {
      throw e
    }
    return true
  },
  /**
* 是否缓存，这个仅内部使用
* @return { Boolean }
*/
  has: function() {
    // ---- 不存在返回空串，否则返回值 ----
    const authToken = cacheHandler.getAuthToken()
    //const token = cacheHandler.getTokenParam()
    if (/* token === '' || */ authToken === '') {
      return false
    } else {
      return true
    }
  }
}
